티스토리 뷰

완전 무료 홈페이지 만들기 - 구글 클라우드 플랫폼, 클라우드 플래어 활용


먼저 이 정보는 https://www.wsgvet.com/ 우성짱의 NAS에서 알려준 정보임을 말씀드립니다. 둘러보면 알겠지만 대단한 정보들로 가득찬 홈페이지입니다.


1. 유료 구매 도메인 주소, 신용 카드, 본인명의의 핸드폰 번호가 있다는 전제하에 시작합니다.


▤▥▨▧▦▩▤▥▨▧▦▩▤▥▨▧▦▩

2. 클라우드플래어( https://dash.cloudflare.com/ )에 가입하여(이메일주소만으로 간단하게 가입하고, 인증 메일이 오면 링크 클릭하여 가입 완료) Add site에 자신의 도메인 주소를 넣어줍니다.

2-1. $0/month라고 적힌 Free 요금제를 선택하고 Confirm plan 클릭

2-2 Add more DNS records for --- 단계에서 만약 이전에 사용하던 정보가 아래쪽에 나온다면 지워주세요(없으면 그냥 Continue). edit나 delete로 가능.

※ --- 부분은 도메인 주소라고 생각하면 편함.

2-3 Add records later 나오면 Confirm

2-4 Select a method for moving --- to Cloudflare 에서 Continue with default 클릭

2-5 Change your nameservers 단계에서 2. Replace with Cloudflare's nameservers: 항목에 나오는 Nameserver 1, Nameserver 2 부분을 메모장 같은 곳에 저장해둡니다. 이 페이지는 일단 그대로 둡니다.

2-6 새 창이나 새 탭을 열고 자신의 도메인 관리 사이트로 들어갑니다. 

2-7 DNS 설정이나, 네임서버 변경같은 메뉴가 보이면 클릭하고 설정합니다. 이 부분은 도메인 관리 사이트마다 다르기 때문에 알아서 변경해야 합니다. 아까 저장해 둔 네임서버 정보를 1차(Nameserver 1), 2차(Nameserver 2) 입력란에 기입하고 네임서버 변경을 클릭하거나 요청하거나 가능한 방법으로 신청하여 네임서버를 클라우드플래어의 것으로 변경하면 됩니다.

2-8 아까 열어둔 2-5 페이지에서 Done, check nameservers 를 클릭합니다.

2-9 Set up security and speed configurations for your website 단계에서 Off(not secure) 선택 후 - Done 클릭합니다(나중에 secure 부분 처리하기 때문에 일단 Off 선택).

2-10 이 단계에서 네임서버 변경에 시간이 걸릴 수 있습니다. 바로 변경되어 클라우드플래어와 연결될 수도 있고 하루가 걸릴 수도 있습니다.

2-11 클라우드플래어에 변경한 네임서버가 잘 연결되면 [Cloudflare] : --- has been added to a Cloudflare Free Plan 이런 제목으로 가입했던 E메일주소로 메일이 옵니다.


▤▥▨▧▦▩▤▥▨▧▦▩▤▥▨▧▦▩

3. 이제 구글 클라우드( https://cloud.google.com/ )로 가서 가상서버호스팅을 구동하면 됩니다. 구글 아이디로 로그인 된 상태임을 가정하여 진행합니다.

3-1 무료로 시작하기 클릭하고 1/2 단계에서 국가 - 대한민국 - 계속 클릭(이 단계에서 반응없을 때 바로 https://console.cloud.google.com/ 로 이동할 것)

3-2 환영 메시지 나오면 약관 체크 후 동의 및 계속하기 클릭

3-3 콘솔 화면이 나오면 Compute Engine 클릭

3-4 처음이므로 프로젝트를 만들어야 합니다. 프로젝트 만들기에서 프로젝트 이름에 --- 입력하고 만들기 클릭

3-5 다시 1/2 단계에서 서비스 약관 체크하고 계속 클릭

3-6 2-2단계에서 계정 유형 개인 선택, 이름 및 주소 등 개인 정보 입력하고 계속 클릭

3-7 이름, 주민등록번호, 이동통신사, 전화번호 입력하고 코드 전송 눌러 문자로 전송 받은 코드를 코드 입력란에 넣고 계속 클릭

3-8 결제 수단에 카드 번호 입력하고 무료 평가판 시작하기 클릭

※ 추 후 유료 서비스를 이용할 경우를 대비해 카드 정보를 입력하는 것으로, 유료 서비스를 이용하지 않으면 결제 되지 않음.

3-9 Compute Engine - VM 인스턴스 클릭

3-10 인스턴스 만들기 클릭

3-11 이름(적당한 이름, 보통은 도메인 주소가 편하겠죠?), 리전(us-west1(오리건), 영역(us-west1-b), 머신계열(일반용도), 시리즈(N1), 머신 유형(f1-micro(vCPU 1개, 614MB 메모리), 부팅 디스크(공개 이미지, 운영체체-Ubuntu, 버전 - Ubuntu 20.04 LTS, 부팅 디스크 유형 - 표준 영구 디스크, 크기(GB) - 30 으로 변경 후 선택할 것), 액세스 범위 - 모든 Cloud API에 대한 전체 액세스 허용, 방화벽( hTTP 트래픽 허용, HTTPS 트래픽 허용 모두 체크) 모두 설정 완료했으면 [만들기] 클릭.

3-12 고정IP 신청을 위해 네트워킹 - VPC 네트워크 - 외부 IP 주소 클릭

3-13 유형에서 '임시'를 클릭하여 '고정'을 선택

3-14 새 고정 IP 주소 예약에서 이름에 ---, 설명에 마음대로 입력 후 예약 클릭

3-15 외부 주소가 고정 됨. 외부 주소 메모장 같은 곳에 잘 저장해 둘 것.

3-16 클라우드플래어( https://www.cloudflare.com/ )로 가서 추가된 도메인 주소 클릭하고 DNS 그림 단추 클릭 - +Add record 클릭

3-17 Type에 A, Name에 @, IPv4 address에 메모장에 저장해 둔 외부 IP 주소, Proxy status에 구름 클릭하여 DNS only로 변경 후 [Save] 클릭

3-18 +Add record 다시 클릭

3-19 Type에 A, Name에 *, IPv4 address에 메모장에 저장해 둔 외부 IP 주소, Proxy status는 DNS only로 변경되어 있으므로 [Save] 클릭

※ 도메인과 고정 IP 주소가 연결됨


▤▥▨▧▦▩▤▥▨▧▦▩▤▥▨▧▦▩

4. Nginx 설치 및 설정을 해보겠습니다. 구글 클라우드 플랫폼에서 계속 작업하겠습니다. Compute Engine - VM 인스턴스에서 연결 밑에 SSH 클릭

4-1 sudo apt update 엔터, sudo apt upgrade 엔터, y 엔터, sudo apt install nginx 엔터, y 엔터

4-2 Nginx 웹 서버 설치 완료. 크롬 브라우저에 자신의 도메인 주소 입력하면 Welcome to nginx! 볼 수 있음.

※ 앞으로 y 엔터 단계는 생략

4-3 Welcome to nginx! 문구 수정하려면 sudo nano /var/www/html/index.nginx-debian.html 입력 후 엔터, 키보드 커서 옮겨서 해당 부분 수정하면 됨.

※ 수정 후 저장은 Ctrl + o 엔터, 혹은 Ctrl + x 로 닫고 변경 내용 y눌러 저장.

4-4 ufw 방화벽 설치 - sudo ufw app list 엔터 - -cloud:~# ufw app list Available applications: Nginx Full Nginx HTTP Nginx HTTPS OpenSSH 뜨면 - sudo ufw allow OpenSSH 엔터(SSH 22번 포트 허용) - sudo ufw allow 'Nginx Full' 엔터(Nginx 80, 443 포트 허용) - sudo ufw enable 엔터  - Command may disrupt existing ssh connections. Proceed with operation (y|n)? - y엔터

4-5 Fail2ban 설치 - sudo apt install fail2ban 엔터 - y엔터 - sudo service fail2ban start 엔터(서비스 실행)

4-6 SWAP 공간 생성하기 - sudo fallocate -l 2G /swapfile 엔터(2GB 스왑공간생성) - sudo chmod 600 /swapfile 엔터(권한설정) - sudo mkswap /swapfile 엔터(스왑파일생성) - Setting up swapspace version 1, size = 2 GiB (2147479552 bytes) no label, UUID=4bcf4d5e-5d57-467e-955c-eaaa8033f9c2 이런 비슷한 내용이 뜨면 - sudo swapon /swapfile 엔터(스왑공간사용) - sudo swapon --show 엔터(스왑공간확인) - free -h 엔터(메모리 상태 및 스왑공간확인) - sudo nano /etc/fstab 엔터 - LABEL=cloudimg-rootfs   /        ext4   defaults        0 0 LABEL=UEFI      /boot/efi       vfat    defaults        0 0 이런 내용이 에디터에 뜨면 - 제일 아래 줄에 /swapfile swap swap defaults 0 0 입력하여 추가 - Ctrl + o, 엔터, Ctrl + x 저장 후 에디터 종료 - 스왑공간생성완료

※ 스왑공간 삭제하려면 - sudo swapoff -v /swapfile 엔터 - sudo rm /swapfile 엔터 - sudo nano /etc/fstab 엔터하여 추가한 부분 삭제 후 저장, 에디터 종료할 것

4-7 시간 설정 - sudo timedatectl set-timezone Asia/Seoul 엔터(서울시간 설정) - timedatectl 엔터(시간확인가능)

※ timedatectl 명령어 쓸 수 없을 때 tzdata 사용 - sudo dpkg-reconfigure tzdata 엔터(Asia 선택 엔터 - Seoul 선택 엔터)

4-8 지역 설정 - sudo dpkg-reconfigure locales - All locales 선택 엔터, en_US.UTF-8 선택 엔터 - ~$ sudo dpkg-reconfigure locales Generating locales (this might take a while)… en_US.UTF-8… done Generation complete. 출력되면 됨.


▤▥▨▧▦▩▤▥▨▧▦▩▤▥▨▧▦▩

5. Letsencrypt 와일드카드 인증서 발급(자동갱신도 됨)

5-1 acme.sh 설치하기 - sudo su 엔터(root계정) - curl https://get.acme.sh | sh 엔터 - 만약에 안 되면 - wget -O - https://get.acme.sh | sh 엔터

※ 아래 내용 나옴. 빨간색 글자 무시. SSH 터미널 끄고, 다시 접속할 것.

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                 Dload  Upload   Total   Spent    Left  Speed

100   775    0   775    0     0   1845      0 --:--:-- --:--:-- --:--:--  1845

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                 Dload  Upload   Total   Spent    Left  Speed

100  193k  100  193k    0     0   391k      0 --:--:-- --:--:-- --:--:--  391k

[Thu Jul 23 12:54:49 UTC 2020] Installing from online archive.

[Thu Jul 23 12:54:49 UTC 2020] Downloading https://github.com/acmesh-official/acme.sh/archive/master.tar.gz

[Thu Jul 23 12:54:50 UTC 2020] Extracting master.tar.gz

[Thu Jul 23 12:54:50 UTC 2020] It is recommended to install socat first.

[Thu Jul 23 12:54:50 UTC 2020] We use socat for standalone server if you use standalone mode.

[Thu Jul 23 12:54:50 UTC 2020] If you don't use standalone mode, just ignore this warning.

[Thu Jul 23 12:54:50 UTC 2020] Installing to /root/.acme.sh

[Thu Jul 23 12:54:50 UTC 2020] Installed to /root/.acme.sh/acme.sh

[Thu Jul 23 12:54:50 UTC 2020] Installing alias to '/root/.bashrc'

[Thu Jul 23 12:54:50 UTC 2020] OK, Close and reopen your terminal to start using acme.sh

[Thu Jul 23 12:54:50 UTC 2020] Installing cron job

no crontab for root

no crontab for root

[Thu Jul 23 12:54:50 UTC 2020] Good, bash is found, so change the shebang to use bash as preferred.

[Thu Jul 23 12:54:51 UTC 2020] OK

[Thu Jul 23 12:54:51 UTC 2020] Install success!

5-2 클라우드플래어에서 API key 찾기 - https://dash.cloudflare.com/profile/api-tokens 로그인 하여 접속 - API Tokens - API Keys - Global API Key - View 클릭 - 사람 체크, 비번 인증하면 키 값(123891255556666442233abcddcbaab 같은 형태)이 나타남 - 다시 SSH에서 - sudo su 엔터 - mkdir -p /etc/nginx/ssl 엔터(인증서 발급 받을 폴더 생성) -  export CF_Key="123891255556666442233abcddcbaab" 엔터 - export CF_Email="xxxx@---.com" 엔터

5-3 와일드 카드 인증서 발급받기 - SSH에 acme.sh --issue --dns dns_cf --keylength ec-256 -d example.com -d *.example.com --key-file /etc/nginx/ssl/privkey.pem --fullchain-file /etc/nginx/ssl/fullchain.pem --cert-file /etc/nginx/ssl/chain.pem --reloadcmd "systemctl reload nginx.service" 엔터(example.com 부분에 자신의 도메인 입력할 것!, ECDSA P-256 와일드 카드 인증서 발급 완료)

※ 대충 아래와 같은 내용 출력 됨.

[Tue 02 Jun 2020 07:20:39 PM KST] Creating domain key

[Tue 02 Jun 2020 07:20:39 PM KST] The domain key is here: /etc/letsencrypt/example.com/example.com.key

[Tue 02 Jun 2020 07:21:26 PM KST] Multi domain='DNS:example.com,DNS:*.example.com'

[Tue 02 Jun 2020 07:21:26 PM KST] Getting domain auth token for each domain

[Tue 02 Jun 2020 07:21:33 PM KST] Getting webroot for domain='example.com'

[Tue 02 Jun 2020 07:21:33 PM KST] Getting webroot for domain='*.example.com'

[Tue 02 Jun 2020 07:21:33 PM KST] Adding txt value: k for domain:  _acme-challenge.example.com

[Tue 02 Jun 2020 07:21:35 PM KST] Adding record

[Tue 02 Jun 2020 07:21:35 PM KST] Added, OK

[Tue 02 Jun 2020 07:21:35 PM KST] The txt record is added: Success.

[Tue 02 Jun 2020 07:21:35 PM KST] Adding txt value: 7iL0 for domain:  _acme-challenge.example.com

[Tue 02 Jun 2020 07:21:37 PM KST] Adding record

[Tue 02 Jun 2020 07:21:38 PM KST] Added, OK

[Tue 02 Jun 2020 07:21:38 PM KST] The txt record is added: Success.

[Tue 02 Jun 2020 07:21:38 PM KST] Let's check each dns records now. Sleep 20 seconds first.

[Tue 02 Jun 2020 07:21:59 PM KST] Checking example.com for _acme-challenge.example.com

[Tue 02 Jun 2020 07:21:59 PM KST] Domain example.com '_acme-challenge.example.com' success.

[Tue 02 Jun 2020 07:21:59 PM KST] Checking example.com for _acme-challenge.example.com

[Tue 02 Jun 2020 07:22:00 PM KST] Domain example.com '_acme-challenge.example.com' success.

[Tue 02 Jun 2020 07:22:00 PM KST] All success, let's return

[Tue 02 Jun 2020 07:22:00 PM KST] Verifying: example.com

[Tue 02 Jun 2020 07:22:05 PM KST] Success

[Tue 02 Jun 2020 07:22:05 PM KST] Verifying: *.example.com

[Tue 02 Jun 2020 07:22:09 PM KST] Success

[Tue 02 Jun 2020 07:22:09 PM KST] Removing DNS records.

[Tue 02 Jun 2020 07:22:09 PM KST] Removing txt: qehk for domain: _acme-challenge.example.com

[Tue 02 Jun 2020 07:22:11 PM KST] Removed: Success

[Tue 02 Jun 2020 07:22:11 PM KST] Removing txt: Vc4a9s7iL0 for domain: _acme-challenge.example.com

[Tue 02 Jun 2020 07:22:14 PM KST] Removed: Success

[Tue 02 Jun 2020 07:22:14 PM KST] Verify finished, start to sign.

[Tue 02 Jun 2020 07:22:14 PM KST] Lets finalize the order, Le_OrderFinalize:

[Tue 02 Jun 2020 07:22:16 PM KST] Download cert, Le_LinkCert:

[Tue 02 Jun 2020 07:22:18 PM KST] Cert success.

-----BEGIN CERTIFICATE-----

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

-----END CERTIFICATE-----

[Tue 02 Jun 2020 07:22:18 PM KST] Your cert is in  /etc/letsencrypt/example.com/example.com.cer

[Tue 02 Jun 2020 07:22:18 PM KST] Your cert key is in  /etc/letsencrypt/example.com/example.com.key

[Tue 02 Jun 2020 07:22:18 PM KST] The intermediate CA cert is in  /etc/letsencrypt/example.com/ca.cer

[Tue 02 Jun 2020 07:22:18 PM KST] And the full chain certs is there:  /etc/letsencrypt/example.com/fullchain.cer

[Tue 02 Jun 2020 07:22:18 PM KST] Installing cert to:/etc/nginx/ssl/chain.pem

[Tue 02 Jun 2020 07:22:18 PM KST] Installing key to:/etc/nginx/ssl/privkey.pem

[Tue 02 Jun 2020 07:22:18 PM KST] Installing full chain to:/etc/nginx/ssl/fullchain.pem

[Tue 02 Jun 2020 07:22:18 PM KST] Run reload cmd: systemctl reload nginx.service

[Tue 02 Jun 2020 07:22:18 PM KST] Reload success

~#

※ 인증서 위치 메모장에 정리해 둘 것!

프라이빗 키 경로 : /etc/nginx/ssl/privkey.pem

chain 인증서 경로 : /etc/nginx/ssl/chain.pem

fullchain 인증서 : /etc/nginx/ssl/fullchain.pem

5-4 발급 리스트 확인하기 - acme.sh list 엔터

5-5 자동갱신 삭제하기 - acme.sh --remove -d yourdomain.com 엔터 - ECDSA 인증서의 경우 acme.sh --remove -d yourdomain.com --ecc 엔터 - 관련 폴더는 찾아서 삭제해야 함.

5-6 acme.sh 자동 업그레이드 - acme.sh --upgrade --auto-upgrade 엔터

5-7 자동갱신 확인하기 - crontab -e 엔터 - 50 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null 이런 내용 나오면 됨(매일 한 번씩 시도한다는 의미).

5-8 Nginx에 적용하기(443포트를 받는 server{ } 에 아래 내용 추가, 기존 인증서 경로 바로 밑에 추가, 나중에 작업하므로 일단 둘 것) 

ssl_certificate_key /etc/nginx/ssl/privkey.pem;

ssl_certificate /etc/nginx/ssl/fullchain.pem;

ssl_trusted_certificate /etc/nginx/ssl/chain.pem;


▤▥▨▧▦▩▤▥▨▧▦▩▤▥▨▧▦▩

6. MariaDB 설치하기

6-1 sudo apt install mariadb-server mariadb-client

6-2 sudo mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!


In order to log into MariaDB to secure it, we’ll need the current password for the root user.  If you’ve just installed MariaDB, and you haven’t set the root password yet, the password will be blank, so you should just press enter here.


Enter current password for root (enter for none):

처음이니까 비번없으므로 그냥 엔터

OK, successfully used password, moving on…


Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation.


Set root password? [Y/n]

Y 엔터

New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. … Success!

root 비번 생성, MariaDB 전용 root 비번이므로 꼭 기억할 것

By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them.  This is intended only for testing, and to make the installation go a bit smoother.  You should remove them before moving into a production environment.


Remove anonymous users? [Y/n]

익명유저 삭제 Y 엔터

… Success!


Normally, root should only be allowed to connect from ‘localhost’.  This ensures that someone cannot guess at the root password from the network.


Disallow root login remotely? [Y/n]

원격 접속 허용하지 않음 Y 엔터

… Success!


By default, MariaDB comes with a database named ‘test’ that anyone can access.  This is also intended only for testing, and should be removed before moving into a production environment.


Remove test database and access to it? [Y/n]

테스트 기록 삭제 Y 엔터

Dropping test database… … Success!


Removing privileges on test database… … Success!


Reloading the privilege tables will ensure that all changes made so far will take effect immediately.


Reload privilege tables now? [Y/n]

재시작 Y 엔터

… Success!


Cleaning up…


All done!  If you’ve completed all of the above steps, your MariaDB installation should now be secure.


Thanks for using MariaDB!

성공

6-3 sudo mysql -u root -p 엔터 - root 비번 넣고 엔터하면 MariaDB [(none)]> 접속, 나오려면 exit; 엔터


▤▥▨▧▦▩▤▥▨▧▦▩▤▥▨▧▦▩

7. PHP 7.4 설치

7-1 sudo apt install php7.4 php7.4-fpm php7.4-mysql php-common php7.4-cli php7.4-common php7.4-json php7.4-opcache php7.4-readline php7.4-mbstring php7.4-xml php7.4-gd php7.4-curl - 패키지 설치

7-2 sudo systemctl start php7.4-fpm - 실행

7-3 sudo nano /etc/php/7.4/fpm/php.ini - 설정

7-4 아래 항목 찾아서 바꿔 줄 것. 찾기는 [F6]키. ;와 같은 주석처리 확인할 것. Ctrl + o - 엔터 - Ctrl + x 로 저장할 것.

short_open_tag = On

memory_limit = 256M

cgi.fix_pathinfo = 0

upload_max_filesize = 100M

post_max_size = 101M

max_execution_time = 360

date.timezone = Asia/Seoul

7-5 sudo systemctl reload php7.4-fpm - 적용


▤▥▨▧▦▩▤▥▨▧▦▩▤▥▨▧▦▩

8. FTP 사용하기(FTP서버 루트 경로를 /var/www/gnuboard 로 설정)

8-1 sudo useradd ftpwww -g www-data (ftpwww 라는 계정사용자를 생성하고 www-data 그룹에 속하도록 함)

8-2 sudo passwd ftpwww (계정 비번 설정) - sudo usermod -d /var/www/gnuboard ftpwww ( 홈 디렉토리 경로 설정) - sudo chown -R www-data:www-data /var/www/gnuboard (소유권 이전) - sudo chmod -R 775 /var/www/gnuboard

8-3 sudo apt install vsftpd (vsftpd 설치) - sudo mv /etc/vsftpd.conf /etc/vsftpd.conf_orig (기존 설정 백업) - sudo nano /etc/vsftpd.conf 에 아래 내용 삽입 Ctrl + o - 엔터 - Ctrl + x 저장 - sudo systemctl restart vsftpd && sudo systemctl enable vsftpd

listen=NO

listen_ipv6=YES

anonymous_enable=NO

local_enable=YES

write_enable=YES

local_umask=002

file_open_mode=0777

dirmessage_enable=YES

use_localtime=YES

xferlog_enable=YES

connect_from_port_20=YES

chroot_local_user=YES

secure_chroot_dir=/var/run/vsftpd/empty

pam_service_name=vsftpd

rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem

rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

ssl_enable=NO

pasv_enable=Yes

pasv_min_port=10000

pasv_max_port=10100

allow_writeable_chroot=YES

8-4 config.php 수정 

// 퍼미션 define('G5_DIR_PERMISSION',  0775); // 디렉토리 생성시 퍼미션define('G5_FILE_PERMISSION', 0664); // 파일 생성시 퍼미션

8-5 UFW 방화벽 설정 sudo ufw allow from any to any port 20,21,10000:10100 proto tcp (방화벽 허용)

8-6 구글 클라우드 플랫폼에서 네트워킹 - VPC 네트워크 - 방화벽 - 방화벽 만들기 - 이름*(ftpd), 설명(ftp활성화), 대상 태그*(ftpd 추가), 소스 IP 범위(0.0.0.0/0 추가), 지정된 프로토콜 및 포트(tcp: 에 20, 21, 10000-10100) - 저장

8-7 Compute Engine - VM 인스턴스 - 해당 서버 이름을 클릭 - VM 인스턴스 세부정보 - 수정 클릭 - 네트워크 태그에 ftpd 삽입 - 저장 클릭

8-8 이제 파일질라로 FTP 사용 가능(아이디 ftpwww)

※ 파일질라 FTP 업로드가 안 될 경우 여기로 와서 8-2 다시 설정해 볼 것


▤▥▨▧▦▩▤▥▨▧▦▩▤▥▨▧▦▩

9. 그누보드 설치

9-1 MariaDB에 그누보드 전용 DB와 유저 생성 sudo mysql -u root -p (접속) - CREATE DATABASE gnuboard; (DB생성) - CREATE USER 'gnuuser'@'localhost' IDENTIFIED BY '원하는 비밀번호'; (gnuuser라는 DB사용자 생성) - GRANT ALL ON gnuboard.* TO 'gnuuser'@'localhost' WITH GRANT OPTION; (모든 권한 획득) - FLUSH PRIVILEGES; - EXIT;

9-2 mkdir -p /var/www/gnuboard (설치 폴더 생성) - cd /var/www/gnuboard (설치 폴더로 이동)

9-3 아미나 최신버전 설치 - 먼저 아래 자료 중 필요한 것 다운로드하여 FTP로 업로드 해둘 것

그누보드 게시판 버전 5.3.3.3 : https://sir.kr/g5_pds/4788

그누보드 게시판 + 쇼핑몰(영카트 5.3.3.3.1) 버전 : https://sir.kr/yc5_pds/2465

아미나 최신 버전 : http://amina.co.kr/bbs/board.php?bo_table=apms

9-4 cd /var/www/gnuboard에 들어가서 tar xfz gnuboard.tar.gz - tar는 이렇게 압축 품

9-5 sudo chmod -R 755 /var/www/gnuboard (권한 설정) - sudo mkdir /var/www/gnuboard/data (data 폴더생성) - sudo chmod 707 /var/www/gnuboard/data (data 폴더 권한 설정) - sudo chown -R www-data:www-data /var/www/gnuboard (그누보드 폴더 이하의 모든 파일과 폴더의 소유권을 www-data에게 이전) - sudo nano /var/www/gnuboard/config.php (설정 파일로 들어감. 다 비워서 되는 경우도 있고, 다 채워야 되는 경우도 있고 해보고 선택할 것)

define('G5_DOMAIN', '');

define('G5_HTTPS_DOMAIN', '');

define('G5_COOKIE_DOMAIN',  '');

=====================================

define('G5_DOMAIN', 'https://www.주소.com');

define('G5_HTTPS_DOMAIN', 'https://www.주소.com');

define('G5_COOKIE_DOMAIN',  '.주소.com');

9-6 sudo nano /etc/nginx/snippets/gnuboard-rewirte.conf (rewirte 설정파일)

#### 그누보드5 nginx rules BEGIN #####

if (!-e $request_filename){

rewrite ^/content/([0-9a-zA-Z_]+)$ /bbs/content.php?co_id=$1&rewrite=1 break;

rewrite ^/content/([^/]+)/$ /bbs/content.php?co_seo_title=$1&rewrite=1 break;

rewrite ^/rss/([0-9a-zA-Z_]+)$ /bbs/rss.php?bo_table=$1 break;

rewrite ^/([0-9a-zA-Z_]+)$ /bbs/board.php?bo_table=$1&rewrite=1 break;

rewrite ^/([0-9a-zA-Z_]+)/write$ /bbs/write.php?bo_table=$1&rewrite=1 break;

rewrite ^/([0-9a-zA-Z_]+)/([^/]+)/$ /bbs/board.php?bo_table=$1&wr_seo_title=$2&rewrite=1 break;

rewrite ^/([0-9a-zA-Z_]+)/([0-9]+)$ /bbs/board.php?bo_table=$1&wr_id=$2&rewrite=1 break;

}

#### 그누보드5 nginx rules END #####

9-7 sudo nano /etc/nginx/snippets/ssl.conf (SSL 관련 설정파일) Ctrl + o, 엔터, Ctrl + x

ssl_certificate /etc/nginx/ssl/fullchain.pem; # SSL 풀체인 인증서 경로. 자신의 환경에 맞게 바꾸세요. acme.sh로 인증서를 생성했다면 수정하지 않아도 됨.

ssl_certificate_key /etc/nginx/ssl/privkey.pem; # SSL 프라이빗 키 경로. 자신의 환경에 맞게 바꾸세요. acme.sh로 인증서를 생성했다면 수정하지 않아도 됨.

ssl_trusted_certificate /etc/nginx/ssl/chain.pem;  # SSL 인증서 경로. 자신의 환경에 맞게 바꾸세요. acme.sh로 인증서를 생성했다면 수정하지 않아도 됨.

ssl_dhparam snippets/dhparams.pem;

ssl_session_cache shared:SSL:10m;

ssl_session_timeout 1d;

ssl_session_tickets off;

ssl_ecdh_curve X25519:sect571r1:secp521r1:secp384r1;

ssl_stapling on;

ssl_stapling_verify on;

resolver 8.8.8.8 8.8.4.4 valid=300s;

resolver_timeout 10s;

ssl_protocols TLSv1.2 TLSv1.3;

ssl_prefer_server_ciphers off;

ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

add_header X-Frame-Options SAMEORIGIN;

add_header X-Content-Type-Options nosniff;

add_header X-XSS-Protection "1; mode=block";     

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

9-8 sudo openssl dhparam -out /etc/nginx/snippets/dhparams.pem 2048 (dhparams.pem 파일 생성)

9-9 sudo nano /etc/nginx/sites-available/gnuboard (서버 설정파일 만들기)

9-9-1 서브 도메인이 없는 경우 - 아래처럼 저장할 것(Ctrl + o, 엔터, Ctrl + x)

server {

    listen 80;

    listen [::]:80;

    server_name www.www.주소 www.주소;  #www.주소를 자신이 원하는 도메인으로 수정하세요.

    location / {

        rewrite       ^/(.*)$ https://www.주소/$1 permanent; #www.주소를 자신이 원하는 도메인으로 수정하세요.

        }

server {

    listen 443 ssl http2;

    listen [::]:443 ssl http2;

    server_name www.주소 www.www.주소;  #www.주소를 자신의 도메인으로 수정하세요.

    root /var/www/gnuboard;

    

    if ($host != 'www.주소' ) {   # www.주소를 자신의 도메인으로 수정하세요.

        rewrite ^/(.*)$  https://www.주소/$1 permanent;    # www.주소를 자신의 도메인으로 수정하세요.

    }

index index.php ;

include snippets/gnuboard-rewirte.conf;

include snippets/ssl.conf;

    location ~ \.(gif|jpg|png)$ {

        add_header Vary "Accept-Encoding";

        add_header Cache-Control "public, no-transform, max-age=31536000";

    }

    location ~* \.(css|js)$ {

        add_header Cache-Control "public, max-age=604800";

        log_not_found off;

        access_log off;

    }

    location ~*.(mp4|ogg|ogv|svg|svgz|eot|otf|woff|woff2|ttf|rss|atom|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf|cur)$ {

        add_header Cache-Control "max-age=31536000";

        access_log off;

    }

charset utf-8;

server_tokens off;

client_max_body_size 100M;

    location / {

        try_files $uri $uri/ =404;

    }

    location ~ /\.ht {

        deny all;

    }

    location ~ \.php$ {

         include snippets/fastcgi-php.conf;

         fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;

         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

         include fastcgi_params;

    }

}

9-9-2 서브 도메인이 있는 경우 - 아래처럼 저장할 것(Ctrl + o, 엔터, Ctrl + x)

server {

    listen 80;

    listen [::]:80;

    server_name board.주소.com;  #board.주소.com를 자신이 원하는 도메인으로 수정하세요.

    location / {

        rewrite       ^/(.*)$ https://board.주소.com/$1 permanent; #board.주소.com를 자신이 원하는 도메인으로 수정하세요.

        }

server {

    listen 443 ssl http2;

    listen [::]:443 ssl http2;

    server_name board.주소.com;  #board.주소.com를 자신의 도메인으로 수정하세요.

    root /var/www/gnuboard;

index index.php ;

include snippets/gnuboard-rewirte.conf;

include snippets/ssl.conf;

    location ~ \.(gif|jpg|png)$ {

        add_header Vary "Accept-Encoding";

        add_header Cache-Control "public, no-transform, max-age=31536000";

    }

    location ~* \.(css|js)$ {

        add_header Cache-Control "public, max-age=604800";

        log_not_found off;

        access_log off;

    }

    location ~*.(mp4|ogg|ogv|svg|svgz|eot|otf|woff|woff2|ttf|rss|atom|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf|cur)$ {

        add_header Cache-Control "max-age=31536000";

        access_log off;

    }

charset utf-8;

server_tokens off;

client_max_body_size 100M;

    location / {

        try_files $uri $uri/ =404;

    }

    location ~ /\.ht {

        deny all;

    }

    location ~ \.php$ {

         include snippets/fastcgi-php.conf;

         fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;

         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

         include fastcgi_params;

    }

}

======================================================

9-10 sudo ln -s /etc/nginx/sites-available/gnuboard /etc/nginx/sites-enabled/ 설정파일 활성화(에러가 남. 그냥 무시) - sudo rm -f /etc/nginx/sites-enabled/default (기존 활성화 된 default 서비 링크 삭제) - sudo nginx -t (이상유무 확인) - nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful (이렇게 나오면 성공) - sudo service nginx restart (재시작)

9-11 브라우저에 자신의 도메인 주소를 넣고 그누보드5 설치하기로 설치하면 됨. MySQL 정보입력에서 이대로 따라왔다면 User는 gnuuser, DB는 gnuboard임.

※ 설치 후 로그인하려거나 회원가입 시 "회원아이디나 비밀번호가 공백이면 안됩니다 회원가입을 하려고 하면 URL에 타 도메인을 지정할 수 없습니다" 이렇게 나오면 9-5의 config.php 설정을 살펴볼 것

9-12 아미나 설치 sudo unzip amina.zip - zip은 이렇게 압축 풀 수 있음. 만약 unzip 패키지 없으면 sudo apt install unzip으로 설치. 아미나 압축풀면 덮어쓰기 됨 replace adm/sql_write.sql? [y]es, [n]o, [A]ll, [N]one, [r]ename: A 엔터로 덮어쓰기


▤▥▨▧▦▩▤▥▨▧▦▩▤▥▨▧▦▩

10. Nginx에 phpmyadmin 설치

10-1 sudo apt update && sudo apt install phpmyadmin (패키지 설치) - Y 엔터 - 핑크색 바탕에서 키보드의 tab키 누르고 엔터(Nginx가 없기 때문) - Configure database for phpmyadmin with dbconfig-common? 에서 <Yes>에서 엔터 - MySQL application password for phpmyadmin: 에서 그냥 엔터(비번 랜덤 생성)

10-2 sudo ln -s /usr/share/phpmyadmin /var/www/gnuboard/pma (/usr/share/phpmyadmin 경로가 /var/www/gnuboard/pma를 가리키도록 설정) - 이제 홈페이지 주소 뒤에 /pma 붙이고 들어가면 phpMyAdmin 접속 가능

10-3 DB 생성 삭제 편하게 하기 위헤 root 계정으로 로그인 할 수 있게 처리 sudo mysql -u root -p (MariaDB 접속) - CREATE USER 'pmauser'@'%' IDENTIFIED BY '원하는비번'; (root를 대신 할 pmauser 생성) - GRANT ALL PRIVILEGES ON *.* TO 'pmauser'@'%' WITH GRANT OPTION; (pmauser에게 root 권한)

10-4 phpMyAdmin 들어갈 때 비번 걸기 - sudo apt install apache2-utils (유틸 설치) - sudo htpasswd -c /etc/nginx/.htpasswd 원하는아이디 (원하는아이디와 비번도 생성 됨) - sudo nano /etc/nginx/sites-available/gnuboard (아래 내용을 listen 443이 있는 server{ } 사이에 넣을 것. Nginx의 해당 경로에 비번 설정 함) - 저장할 것(Ctrl + o, 엔터, Ctrl + x)) 

location /pma {

auth_basic "Restricted Access";

auth_basic_user_file /etc/nginx/.htpasswd;

        }

===============================

10-5 sudo nginx -t (테스트) - sudo nginx - nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful (이렇게 나오면 됨) - sudo service nginx reload (재시작) - 다시 들어가면 암호 입력 창 나옴.

※ 404 not found 나오면 10-2 경로 설정 sudo ln -s /usr/share/phpmyadmin /var/www/gnuboard/pma 다시 해 볼 것.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함