Home Authentication - Password
Post
Cancel

Authentication - Password

๐Ÿ™‚๋“ค์–ด๊ฐ€๋ฉฐโ€ฆ

ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ์ค‘์— ์•ฑ ๊ฐœ๋ฐœ์ž ํด๋ผ์ด์–ธํŠธ์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ณด๋‚ด์•ผ ์•ˆ์ „ํ• ๊นŒ? Https ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ•ด์‹ฑํ•˜์—ฌ ๋ณด๋‚ด์•ผ ํ• ๊นŒ?

์„ธํŒ…

git์„ ์‚ฌ์šฉํ•˜์—ฌ ubuntu์— ํ”„๋กœ์ ํŠธ ํด๋ก ํ•˜๊ธฐ

AWS EC2 & RDS๋ฅผ ์„ค์ •์ด ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.
git์„ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ๊ฐœ๋ฐœํ•˜์˜€๋˜ ํ”„๋กœ์ ํŠธ๋ฅผ ํด๋ก ํ•˜์—ฌ EC2 ํ™˜๊ฒฝ์— ๊ฐ€์ ธ์˜จ๋‹ค.
/srv/ ํด๋”์— ํด๋ก ์„ ํ•˜๊ธฐ ์ „์—, ํ•ด๋‹น ํด๋”๋Š” root ์‚ฌ์šฉ์ž์˜ ์†Œ์œ ์ด๊ธฐ์— ํ˜„์žฌ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์•ผ ํ•œ๋‹ค.

  1. sudo chown -R $(whoami):$(whoami) /srv/ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ๊ถŒํ•œ์„ ๋ณ€๊ฒฝํ•œ๋‹ค.
  2. git clone [repo] ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋ณต์ œํ•œ๋‹ค.

pyenv์™€ pipenv๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์ƒํ™˜๊ฒฝ ๊ตฌ์ถ•

python ๋ฒ„์ ผ ๊ด€๋ฆฌ์™€ ๊ฐ€์ƒํ™˜๊ฒฝ ๊ตฌ์ถ•์„ ์œ„ํ•ด ํ•„์ž๋Š” ๋ณดํ†ต pyenv & pipenv๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
ubuntu ํ™˜๊ฒฝ์— ์„ค์น˜๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

  1. pyenv ์„ค์น˜๋ฅผ ์œ„ํ•ด ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•œ๋‹ค.
    1
    2
    3
    4
    5
    
     sudo apt-get update
     sudo apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev \
     libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
     xz-utils tk-dev libffi-dev liblzma-dev python3-openssl git
    
    
  2. curl https://pyenv.run | bash ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ pyenv๋ฅผ ์„ค์น˜ํ•œ๋‹ค.
  3. pyenv ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•œ๋‹ค.
    1
    2
    3
    
     export PATH="$HOME/.pyenv/bin:$PATH"
     eval "$(pyenv init --path)"pip
     eval "$(pyenv virtualenv-init -)"
    
  4. ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ ์šฉ์„ ์œ„ํ•ด ์‰˜์„ ์žฌ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜, source ~/.bashrc ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  5. ํ”„๋กœ์ ํŠธ์— ๋งž๋Š” ํŒŒ์ด์ฌ ๋ฒ„์ ผ ์„ค์น˜ ๋ฐ ๊ด€๋ฆฌ(ํ˜„์žฌ ec2์—์„œ ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ, global๋กœ ์„ค์ •ํ•จ)
    1
    2
    
     pyenv install 3.11.2
     pyenv global 3.11.2
    
  6. pip install pipenv pipenv ํŒจํ‚ค์ง€ ์„ค์น˜
  7. ํ”„๋กœ์ ํŠธ์— pipenv.lock ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ ํ›„ pipenv install & pipenv shell ์ˆ˜ํ–‰

Gunicorn & Nginx ์„ธํŒ…

Gunicorn

  1. sudo vi /etc/systemd/system/gunicorn.service ์ƒ์„ฑ ๋ฐ ํŽธ์ง‘
    gunicorn.sock ํŒŒ์ผ์€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค. /run/ ํด๋”๋กœ ์ง€์ •ํ•˜๋ฉด ๊ถŒํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค.
    ๊ฐ€์ƒํ™˜๊ฒฝ ์œ„์น˜๋Š” pipenv --venv ๋ช…๋ น์–ด๋กœ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
     [Unit]
     Description=Deployment Server
     After=network.target
    
     [Service]
     User=ubuntu
     Group=www-data
     WorkingDirectory=[manange.py์˜ ๋””๋ ‰ํ† ๋ฆฌ]
     ExecStart=[๊ฐ€์ƒํ™˜๊ฒฝ ์œ„์น˜]/bin/gunicorn \
               --access-logfile - \
               --workers 1 \
               --bind unix:/tmp/gunicorn.sock \
               server.wsgi:application
    
     [Install]
     WantedBy=multi-user.target
    
  2. sudo systemctl start gunicorn.service & sudo systemctl enable gunicorn.service ๋ช…๋ น์–ด ์‹คํ–‰
  3. sudo systemctl status gunicorn.service ์ƒํƒœ ํ™•์ธ -> active ์ƒํƒœ๊ฐ€ ์ •์ƒ์ด๋‹ค.

Nginx

  1. sudo apt install nginx python3-pip python3-dev libpq-dev ํŒจํ‚ค์ง€ ์„ค์น˜
  2. sudo vi /etc/nginx/sites-available/server ํŒŒ์ผ ์ƒ์„ฑ ๋ฐ ํŽธ์ง‘
    • static ํŒŒ์ผ ์„ค์ •์— ๋”ฐ๋ผ ๋‹ค๋ฅด์ง€๋งŒ, alias๊ฐ€ ์•„๋‹Œ root๋กœ ์„ค์ •ํ•  ๊ฒฝ์šฐ ์›น์„œ๋ฒ„๊ฐ€ staticfiles/static ์ด๋Ÿฐ ์‹์œผ๋กœ ์ •์  ํŒŒ์ผ์„ ์ฐพ๋Š”๋‹ค.
    • ํ•„์ž๋Š” ssl ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ https ํ†ต์‹ ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— if๋ฌธ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. SSL ์ธ์ฆ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ ์„ค๋ช…ํ•  ๊ฒƒ์ด๋‹ค.
      1
      2
      3
      
        if ($http_x_forwarded_proto = 'http'){
                return 301 https://$host$request_uri;
            }
      
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
     server {
         listen 80;
         server_name [IP or Domain];
    
            
         location /static/ {
             alias [ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ]/staticfiles/;
         }
    
         location / {
             include proxy_params;
             proxy_pass http://unix:/tmp/gunicorn.sock;
         }
    
         if ($http_x_forwarded_proto = 'http'){
             return 301 https://$host$request_uri;
         }
     }
    
  3. sudo ln -sf /etc/nginx/sites-available/server /etc/nginx/sites-enabled ๋ณต์‚ฌ
  4. sudo nginx -t -> Nginx ๊ตฌ์„ฑ ๊ฒ€์‚ฌ
  5. sudo systemctl restart nginx -> Nginx ์žฌ์‹œ์ž‘
  6. sudo ufw allow 'Nginx Full'

Error log ํ™•์ธ ๋ฐฉ๋ฒ•

  1. Gunicorn
    • sudo systemctl status gunicorn.service gunicorn ์ƒํƒœ ํ™•์ธ
    • sudo journalctl -u gunicorn.service -n 100 --no-pager ์ตœ๊ทผ 100๊ฐœ์˜ ๋กœ๊ทธ ํ™•์ธ
    • sudo systemctl daemon-reload & sudo systemctl restart gunicorn.service ์žฌ์‹œ์ž‘ ๋ช…๋ น์–ด
  2. Nginx
    • cat /var/log/nginx/error.log nginx ๋ช…๋ น์–ด ํ™•์ธ

๋„์›€์ด ๋˜๋Š” ์„ธํŒ…

  1. ์‹œ๊ฐ„ ์„ค์ •
    • sudo timedatectl set-timezone Asia/Seoul
  2. ์‚ฌ์šฉ์ž ํ™•์ธ
    • whoami
  3. ํด๋” ๊ถŒํ•œ ์„ค์ •
    /srv/ ํด๋”์— ๊ถŒํ•œ ์„ค์ •ํ•  ๋•Œ,
    • sudo chown ubuntu:ubuntu /srv/
  4. (ํ”„๋กœ์ ํŠธ์˜ ํ™˜๊ฒฝ์„ ๋‚˜๋ˆˆ ๊ฒฝ์šฐ)production.py ์ ์šฉ์„ ์œ„ํ•ด,
    • export DJANGO_SETTINGS_MODULE=server.config.settings.production => ํ„ฐ๋ฏธ๋„ ์„ธ์…˜์ด ์ข…๋ฃŒ๋˜๋ฉด ๋‹ค์‹œํ•ด์ค˜์•ผ ํ•ด์„œ ๊ท€์ฐฎ๋‹ค
    • ~/.bashrc ๋˜๋Š” ~/.bash_profile ์ˆ˜์ •: Bash ์‰˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ํŒŒ์ผ์— export DJANGO_SETTINGS_MODULE=server.config.settings.production ๋ผ์ธ์„ ์ถ”๊ฐ€ํ•˜์ž

๋งˆ์น˜๋ฉฐ

๋‚ด์šฉ์„ ์กฐ๊ธˆ ๋” ๊ฒ€ํ† ํ•˜๊ณ  ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค. ์•„๋งˆ๋„ ๋”ฐ๋ผํ•ด๋ณด๋ฉด ์žก๋‹คํ•œ ์—๋Ÿฌ๋“ค์ด ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋‹ค. ๋Œ“๊ธ€์— ๋‚จ๊ฒจ์ฃผ๊ฑฐ๋‚˜, ๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•˜๋„๋ก ํ•˜์ž!

This post is licensed under CC BY 4.0 by the author.