메뉴 건너뛰기

enjoyTools.net

피씨방스튜디오 만들기 #1/4 - vscode 포터블 설정

피씨방스튜디오 만들기 #2/4 - MariaDB, HeidiSQL 준비

피씨방스튜디오 만들기 #3/4 - NginX, PHP 준비

피씨방스튜디오 만들기 #4/4 - 취합 및 마무리

 

피씨방스튜디오 만들기 #번외1 - Node.js 준비

피씨방스튜디오 만들기 #번외2 - PostgresSQL 준비

 

 

Visual Studio Code 윈도우용과 NginX, PHP, MySQL 등을 피씨방에서도 설치 없이, 압축만 풀어서 바로 쓸 수 있게 하기 위한 삽질.

주로 배치파일을 활용하며, 일부는 MSys Shell 에서 파일을 가져다 쓸 것임.

준비할 파일들은 64비트용으로 할 것임.

 

0. 폴더는 아래와 같이 구성. 앞으로 여기에 필요한 폴더들을 추가해 나갈 것임.

 * 루트 폴더

 - tools : 프로그램들이 들어갈 폴더

  ** vscode : 비주얼스튜디오코드

  ** heidisql : 하이디SQL은 MySQL 클라이언트

  ** servers

   -- mariadb : MySQL 대신, 마리아DB 사용

   -- nginx : http 웹서버

   -- pgsql : PostgreSQL

   -- php

  ** utils

   -- sed : 텍스트 파일 변조용. MSys에서 필요한 것만 가져올 거임

  ** nodejs

 - workspace : 작업 공간으로 사용할 폴더

 

1. pgsql 준비

 * https://www.enterprisedb.com/download-postgresql-binaries 에서 Win 86-x64 버튼을 클릭해서 다운로드 받는다.

  - 가입 필요.

 * 0번 항목에 적힌 경로에 압축을 푼다.

 

2. 폴더용량 다이어트 - 이전에 MariaDB에서 했던 것 처럼 필요없는 파일 또는 폴더들을 삭제함.

 * 삭제할 폴더

  - symbols : *.pdb 파일들만 잔뜩 있는 걸로 봐서 디버그용인 것 같다.

  - pgAdmin 3 또는 pgAdmin 4 : 이거 대신 하이디SQL 쓸끼다.

  - doc : 설명서

 

3. 초기 데이터 준비

 * DB 데이터 생성

  - pgsql 설치된 폴더로 이동

  - data 폴더 생성

  - 하위에 존재하는 bin 폴더로 이동

  - 아래와 같이 입력하여 데이터 생성. 아래에 -U postgres 는 수퍼유저임. 아니면 -U root 로 하등가...

  ** 이 때, -W 옵션에 의해 password 질의를 받게 된다.

initdb -D ..\data -U postgres -W -E UTF8 -A md5

-- 또는 --

initdb -D ..%\data -U postgres -W -E UTF8 -A md5 --no-locale

 * %pgsql폴더%\data\postgresql.conf 파일을 열고 연결 및 동작 설정을 입맛에 맞게 수정한다.

  - 나는 port만 15432로 변경함.

 * %pgsql폴더%\data\pg_hba.conf 파일을 열고 허용할 연결 계정이나 경로 등을 잡아준다.

  - 나는 로컬 개발용으로 쓰려고 이러고 있는 거라서 아래와 같이 설정함.

# TYPE  DATABASE        USER            ADDRESS                 METHOD

 

# IPv4 local connections:

host    all             all             127.0.0.1/32            md5

# IPv6 local connections:

host    all             all             ::1/128                 md5

 

4. 실행 및 종료용 배치파일을 작성

 * 실행용 파일 생성

  - %pgsql폴더% 에 pgsql_start.cmd 라는 이름으로 배치파일을 만들어서 아래와 같은 내용을 넣어준다.

rem pgsql_start.cmd

 

cd %PGSQL_ROOT%

start bin\pg_ctl -D .\data start

 * 종료용 파일 생성

  - %pgsql폴더% 에 pgsql_stop.cmd 라는 이름으로 배치파일을 만들어서 아래와 같은 내용을 넣어준다.

rem pgsql_stop.cmd

 

cd %PGSQL_ROOT%

bin\pg_ctl -D .\data stop

 

5. run_vscode.bat 파일에 관련 내용 추가

 * 기존 내용에 아래의 파란 부분을 적당한 위치에다가 추가한다.

rem @echo off

 

rem vscode path

set "VSC_ROOT=%cd%"

set "VSC_DRIVE=%CD:~0,2%"

set "PATH=%cd%;C:\Windows;C:\Windows\System;C:\Windows\System32"

rem 기존 시스템 설정의 PATH에 NPM이 깔려있으면 충돌나므로, 기존 패스는 아예 다 날려버림

rem set "PATH=%cd%;%PATH%"

 

rem heidisql path

cd ..\heidisql

set "PATH=%cd%;%PATH%"

 

rem node.js path

cd ..\nodejs

set "PATH=%cd%;%PATH%"

rem set "NODE_ENV=production"

rem set "NODE_ENV=development"

set "NODEJS_ROOT=%cd%"

set "NODEJS_CACHE=%NODEJS_ROOT%\npm-cache"

RunHiddenConsole "" npm config set cache %NODEJS_CACHE% --global

 

rem nginx path

cd ..\servers\nginx

set "PATH=%cd%;%PATH%"

 

rem php path

cd ..\php

set "PATH=%cd%;%PATH%"

 

set PHP_FCGI_CHILDREN=0

set PHP_FCGI_MAX_REQUESTS=10000

 

rem postgres path

cd ..\pgsql

set "PATH=%cd%;%PATH%"

set "PGSQL_ROOT=%cd%"

 

rem mariadb path

cd ..\mariadb

set "PATH=%cd%;%PATH%"

cd bin

set "PATH=%cd%;%PATH%"

 

 

cd %VSC_ROOT%

Code.exe --extensions-dir .\data\extension --user-data-dir .\data\user-data

 

rem vscode 종료 시, 기존 프로세스 모두 종료

taskkill /F /IM nginx.exe > nul

taskkill /F /IM php.exe > nul

taskkill /F /IM php-cgi.exe > nul

taskkill /F /IM mysqld.exe > nul

 

cd %PGSQL_ROOT%

bin\pg_ctl -D .\data stop

 

rem vscode 종료 시, 아래 항목 삭제

rem * 크로미움 캐시데이터

rem * npm-cache

 

%VSC_DRIVE%

cd %VSC_ROOT%

 

del .\data\user-data\Cache\*.* /Q

del .\data\user-data\CachedData\*.* /Q

FOR /D %%p IN (".\data\user-data\CachedData\*.*") DO rmdir "%%p" /s /q

 

npm cache clear --force

 

exit

 

6. vscode 실행항목 추가

 * 이전과 동일하며, 아래 과정을 거쳐서 vscode에서 pgsql 을 실행할 수 있게 설정한다.

  - vscode 메뉴 파일 > 기본 설정 > 설정 [Ctrl+Comma] 을 선택한다.

  - 탭을 보면 vscode의 버전에 따라서 settings.json 또는 {} 사용자 설정 이라는 이름으로 표시되는데 아래와 같이 Launcher Extension을 위한 내용을 추가한다.

 

    "launcher.commands": [

        {

            "description": "Web Browser",

            "executable": "cmd.exe",

            "parameters": "/c start http://localhost:8800",

            "startIn": "%workspace%"

        },

        {

            "description": "NginX/PHP Start",

            "executable": "nginx_start.bat",

            "startIn": "%workspace%"

        },

        {

            "description": "NginX/PHP Stop",

            "executable": "nginx_stop.bat",

            "startIn": "%workspace%"

        },

        {

            "description": "MariaDB Start",

            "executable": "mariadb_start.bat",

            "startIn": "%workspace%"

        },

        {

            "description": "MariaDB Stop",

            "executable": "mariadb_stop.bat",

            "startIn": "%workspace%"

        },

        {

            "description": "PgSQL Start",

            "executable": "pgsql_start.cmd"

        },

        {

            "description": "PgSQL Stop",

            "executable": "pgsql_stop.cmd"

 

        },

        {

            "description": "HeidiSQL",

            "executable": "heidisql.exe",

            "startIn": "%workspace%"

        }

    ]

 

7. 마무리

위에서 만든 계정과 암호로 접속할 수 있게, 하이디SQL에 관련 설정을 추가한다.

 

사실, 내가 mysql을 거의 모르는데, pgsql은 mysql 보다도 더 모른다. 아는게 아예 없다.

당장 쓰지도 않을 것을 굳이 이렇게 만든 이유는 mysql의 라이선스 문제 때문에, 언젠가는 사용할 일이 생길 것 같은 느낌이 들어서 그랬다.

(라이선스가... MySQL은 GPL/Commercial, PgSQL은 BSD.)

 

내 기준은 딱 두 개다.

 1. 피씨방 같은 곳에서 압축 풀어서 즉시 실행 가능

 2. %AppData% 등에 흔적을 남기지 않음

 

배치파일을 잘 활용해서 파이썬 같은 것들도 설치 없이 사용할 수 있다.

해보니 안되는 것도 있긴 하지만...

 * 파이썬은 아래의 문제만 해결해주면 됨. 참고

  - pip 등의 모듈 등에 하드코딩된 C:\Python36 등으로 인해 에러가 나기 때문에 Hex에디터로 수정해줘야 한다.

 * 닷넷코어를 제외한 MS 제품들과 서비스로 도는 것들을 제외하면 웬만하면 다 되는 것 같다.

 

* 여기까지 작업한 결과물 예시 (이전의 NodeJS 포함) : 깃헙으로 옮김 - https://github.com/edp1096/pcbangstudio

 - 이 작업물(윗줄 다운로드 링크)에 있는 pgsql 계정: root / pgsql

 - 주의: 기존에 APM이 설치되어 있으면, vscode 종료시 APM에서 실행 중인 php나 mysql 프로세스가 같이 죽을 수 있다.

 


추가

 

Postgres 실행 시 콘솔이 남아있는데, 없애려면 이전에 사용했던 배치파일을 수정해서 RunHiddenConsole.exe 로 실행되게 만들면 된다.

 

 

여기까지 해서 나홀로 개발환경 꾸미기 놀이 끝.

 

 

끝.