Side Project#/Snake Game

웹 서버 올리기

ch4rli3kop 2019. 5. 8. 01:25
반응형

웹 서버 올리기



게임을 잘 만들었으니 이제 서버에 올려보자.

docker로 간단하게 환경을 구성해주기로 했는데, ubuntu에서 apache랑 php 등등을 설치해본적이 없어서 그냥 간단하게 build하고 내부로 attach해서 하나씩 설치해나가기로 했다.


먼저 Dockerfile을 만든 뒤, build한다.

$ cat Dockerfile 
FROM ubuntu:latest
RUN apt update
RUN useradd -mU web1
WORKDIR /home/web1

$ sudo docker build --tag snake:latest .
...

잘 빌드해서 이미지를 생성했다면 이제 container를 생성시켜서 돌린다. 서버의 12361 포트와 연결시켜줄 예정이다.

sudo docker run -it -p 12361:80 --name web_snake snake:latest /bin/bash
sudo docker attach 3056fd2d304f

해당 container id에 attach해서 container 안에 들어가보도록 하자.


좋아 이제 apache랑 php, 그리고 mysql을 설치하면 된다.


apache

apache부터 시작하도록 한다.

$ apt install apache2 -y
$ service apache2 restart

샥샥하면 끝이다.


잘 되는지 curl을 이용해서 확인해줍시다

$ curl localhost

php

다음은 php이다.

$ apt install php php-mysql -y

처음에 php-mysql을 빼먹었는데, 이거 때문에 굉장히 고생을 많이 했다... mysqli_connect 등의 함수들이 담겨있는 라이브러리가 저거다... 꼭 설치하도록 하자


mysql

마지막으로 mysql이다.

$ apt install mysql-server -y
$ mysql_secure_installation
$ service mysql restart

끗! 이기는 한데 저거 mysql_secure_installation으로 세팅해놓았기 때문에, mysql에 새로운 사용자를 등록할 때 비밀번호 제한들이 너무 짜증나게 빡새다...

사용자 만들 때마다 current policy requirements 어쩌구 자꾸 그러는데.. 다음의 쿼리문으로 수정할 수 있다.

mysql> show variables like 'validate_password%'
mysql> set global validate_password_policy=low;


여기서 제일 중요한거!

일단 사용자를 만들어야 한다.

root 유저로 하면 Access denied for user 'root'@'localhost'가 뜨면서 오류가 발생한다.

적당히 다음과 같이 사용자를 만들고 권한을 주도록 하자

mysql> create user 'username'@'localhost' identified by 'password';
mysql> grant all privileges on *.* to 'username'@'localhost';

config.php 파일의 계정정보를 여기서 새로 등록한 계정으로 고쳐주도록 하자.


이제 그러면... db table을 새로 만들어 주어야한다.

mysql> create database snakegame;
mysql> use snakegame;
mysql> create table rank(
  id INT(11) NOT NULL AUTO_INCREMENT,
  username VARCHAR(30) NOT NULL,
   date DATETIME NOT NULL,
  score INT(11) NOT NULL,
   PRIMARY KEY(id)
) ENGINE=InnoDB, DEFAULT CHARSET=utf8;

mysql> INSERT INTO rank (username, date, score) VALUES ('charlie', NOW(), '12');
mysql> INSERT INTO rank (username, date, score) VALUES ('charlie', NOW(), '17');

허전하니까 몇개 더 만들어줬다.


이제 docker를 빠져나와서 웹 서버 파일들이 있는 폴더를 옮겨준다. ctrl+p && ctrl+q 하면 컨테이너를 끄지않고 빠져나올 수 있다. 이렇게 안하고 그냥 docker 내부에 git을 설치해서 받아와도 된다.

$ git clone https://github.com/ch4rli3kop/Snake_game.git
$ sudo docker cp Snake_game web_snake:/var/www/.

아마 잘 동작할 것 같다. curl로 계속 확인해보면서 작업을 수행하도록 하자.


이후의 내용들은 위 작업들을 수행하면서 겪은 삽질들이다.


맨 처음 겪은 문제는 서버에 올렸는데도 내 컴퓨터에서 접속이 안됀다는 거였다.

서버 로컬에서는 curl로 잘 받아지는 것을 확인할 수 있었는데, 이상하게도 외부랑 연결이 안되었다...

처음에는 방화벽 문제인가? 하고 iptables 이용해서 포트도 열어놓고 그랬는데, 결국 아니였다..


다양한 삽질을 진행한 뒤, 문득 서버가 라우터로 포트포워딩을 된다는 사실을 깨달았고, 내가 지정해놓은 포트는 라우터에 등록이 안된 거일지도 모른다는 생각이 문득 들었다.

결론적으로 내 가설이 맞았고, 포트를 변경하니 정상적으로 통신을 할 수가 있었다.


다음으로 맞닥뜨린 문제는 curl로 php에 대한 출력을 받지 못한 것이였다.

apache를 계속 껏다켯다 해보았지만 이상하게도 snake.php에 대해서만큼은 요청한 결과를 받을 수가 없었다.

echo를 이용해서 조금씩 나름의 디버깅을 진행해본 결과, mysqli_connect()가 제대로 실행되지 않는 것 같았다.

php error log를 보기위해서 php.ini 파일에서 display_errors 항목을 On으로 변경해서 에러 메세지를 살펴보니 ㄹㅇ이었다.

$ vim /etc/php/7.2/apache2/php.ini 

으어어어 뭐지하고 이것저것 시도해본 결과 설치한 줄 알았던 php-mysql을 설치하지 않은 걸 깨달았다.. ㅋㅋ

php-mysql을 설치하니 해결됬음!


근데 이번에 또 mysqli_connect()가 제대로 실행이 되지 않는다는 에러 로그를 받았다..

찾아보니 mysql의 계정과 관련된 문제던데, 사용자를 새로 추가하면 되는 문제였다.


와우... 글 쓰면서 다시 읽어보면 별거 아닌거 같은 문제들인데, 해결하는데 왠종일 걸렸다..

진빠진다으..


게임은 http://163.152.225.231:12361/snake.php 여기서 즐길 수 있다.

점수 조작이 되기는 하지만 게임은 게임대로 즐기는게 더 재미있으니 자제하길바람


아무튼 결국 완성을 했으니 만족스럽다.

다음은 어떤 side project를 진행해볼까...


반응형

'Side Project# > Snake Game' 카테고리의 다른 글

Creating Snake Game 2 (in javascript)  (0) 2019.05.07
Creating Snake Game (in javascript)  (7) 2019.04.12