Gitea 서버 설치 및 설정 가이드

Linux, 소스관리
이 가이드는 Ubuntu 환경에서 Gitea 서버를 설치하고 설정하는 전체 과정을 단계별로 안내합니다. 1. 시스템 업데이트 sudo apt update sudo apt dist-upgrade -y sudo apt autoremove -y cp /etc/skel/.bashrc /root/.bashrc 2. 로케일 및 시간대 설정 sudo vi /etc/default/locale # 파일 내 LANG=en_US.UTF-8로 설정 dpkg-reconfigure tzdata timedatectl sudo apt install systemd-timesyncd sudo systemctl enable systemd-timesyncd --now timedatectl timesync-status sudo apt install chrony chronyc sourcestats -v 3. Nginx 설치 및 설정 sudo apt install nginx -y sudo vi /etc/nginx/sites-available/gitea # 아래 내용을 파일에 추가 server { listen 80; server_name git.도메인.com; location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } sudo ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/gitea sudo nginx -t sudo systemctl restart nginx 4. SSL 인증서 발급 (Let's Encrypt) sudo apt install certbot python3-certbot-nginx -y…
Read More

OpenVPN Client 파일 생성서 remote 주소를 IP 말고 도메인으로 설정

Linux, 컴퓨터
OpenVPN을 사용할 때, 클라이언트가 서버에 접속하기 위한 정보는 보통 .ovpn 파일 혹은 공통 템플릿(client-common.txt)에 작성됩니다. 이때 서버 주소를 IP 주소가 아닌 도메인 이름(DNS) 으로 설정하면 훨씬 유연한 구성이 가능합니다. 왜 IP 주소 대신 도메인 주소를 써야 할까? ✔️ IP는 바뀔 수 있다 많은 서버는 고정 IP를 사용하지 않거나, 유동 IP 환경에서 운영되기도 합니다. 예를 들어, 일반 가정용 인터넷이나 일부 클라우드 환경에서는 재부팅 혹은 일정 시간 경과 후 IP가 변경될 수 있습니다. ✔️ 도메인 주소는 항상 유효하다 이를 해결하기 위해 DDNS(Dynamic DNS) 기능을 활용하면, IP가 변경되더라도 도메인 이름을 항상 최신 IP로 연결시킬 수 있습니다. 클라이언트는 접속 시 항상 도메인을 기준으로 DNS 조회를 하므로 IP 변경에 신경 쓰지 않아도 됩니다. #vi /etc/openvpn/server/client-common.txt 설정 예시: client-common.txt에서 도메인 적용하기 OpenVPN의 클라이언트 설정 파일 또는 공통 템플릿 파일에서 다음과 같이 설정을 변경합니다. 기존 설정 (IP…
Read More

OPEN VPN으로 Client 간 접속 및 도메인 접속 차단

Linux, Windows
VPN으로 외부에서 내부 Test 서버를 접속 하기 위해서 조금은 설정을 하다가 일단은 기록을 진행 합니다. 물리적으로 거리가 있고, 동일 네트워크망에 있지 않을 경우에 해당 문제를 해결 하기 위해서 기록을 하는것입니다. 응용을 하기에 따라서 다른 용도로 사용을 할 수 있지만 제가 중점적으로 노리는 효과는 "가상 내부망 구축", "접속할 사이트 제한" 2가지를 중점적으로 해서 처리한 내용입니다. 일단 OPEN VPN 서버 설정을 변경을 하여서 Client간에 통신이 되도록 허용하고, DNS 조정을 통해서 원하지 않는 웹사이트는 접속 하디 않도록 설정을 합니다. # vi /etc/openvpn/server/server.conf # 서버 설정 파일에 클라이언트 간 통신 허용 client-to-client # OPENVPN에 다른 DNS 차단하도록 설정 push "block-outside-dns" # 고정IP 할당하기 위한 설정 client-config-dir /etc/openvpn/ccd # OPENVPN Status 기록 status /var/log/openvpn-status.log status-version 2 # DNS를 현재 서버로 이용하기 push "dhcp-option DNS 10.8.0.1" #※ 이미 있을 경우는 삭제를 하거나 수정하시며 됩니다. 해당 설정을…
Read More

왜 웹서버에 접속이 많을까나?

Linux
일단 제가 운영하는 블로그는 몇개 있습니다. 최근에 너무 바빠서 글을 적지 않고 있어서 검색엔진과 다른 사이트에서 방문할 일이 0%에 가깝습니다. 이전에 작성할 글이 있기 때문에 접속이 없다고는 말을 하지 못하지만, 최근에 맞춰서 글이 없어서 방문할 이유가 전혀 없습니다. 그런데, 검색엔징 Bot등이 엄청 방문하니 조용하던 웹서버는 비명을 지르고 있습니다. 서버관리를 통해서 차단을 하고 있지만 이게 차단을 한다고 막아 지는게 아니지만 최대한 자동으로 막아 두고 있습니다. 개인적인 블로그만 운영하고, 커뮤니티도 없고 파일 업로드등도 열어 두지 않는 웹서버라서 제가 모르는 사람이 방문하다고 하여서 할게 블로그에 댓글을 남기는게 끝입니다. 블로그에도 스펨을 막기 위해서 플러그인등을 설치 하는등 여러가지 하고 있어서 뚫고 들어오는 사람이 일주일에 몇명은 있지만, 나날이 발전하는 스펨이야 조금 뚫릴 수 있다고 보고 있습니다. 스펨과 Bot은 그나마 서버 탈취나 취약점 찾기 위한 노력을 한다고 하지만 SEO 사이트들이 들어오는것은 100% 이해를 하지 못하겠습니다. 저는 블로그를…
Read More

Apache Log에 실제 IP 주소가 나오도록하기

Linux
일단 cloudflare 의 글을 참조 하여서 작성되었습니다.참조 주소는 "https://developers.cloudflare.com/support/troubleshooting/restoring-visitor-ips/restoring-original-visitor-ips/" 입니다. 아파치 기능을 활성화 합니다. sudo a2enmod remoteip 비활성화시는 다음과 같은 명령어를 사용 하시면 됩니다. sudo a2dismod remoteip 단일 서버이면 apache 환경설정에 설정하시면 되고, 아닐 경우 각각의 virtualhost에 설정을 하시면 됩니다.아래 내용이 설정할 내용입니다. RemoteIPHeader CF-Connecting-IP 아래는 위 구분을 추가 할 경우에 예시일뿐이니 각자 설정에 맞춰서 설정해 주시기 바랍니다. RemoteIPHeader CF-Connecting-IP ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined 이후에 아파치 환경설정도 변경을 해주시면 됩니다./etc/apache2/apache2.conf 파일에서 LogFormat에서 "%h" 부분을 "%a"로 변경합니다. 아래는 변경하고 난 후의 예시 입니다. LogFormat "%v:%p %a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combinedLogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combinedLogFormat "%a %l %u %t \"%r\" %>s %O" common 그리고 나서 이제 cloudflar의 IP를 허용을 해주어야 하기 때문에 아래의 파일을 수정 합니다.해당 파일이 있을수도 없을수 있으니…
Read More

폰터 어썸 유료를 내 서버에서 서비스하자

Linux, WWW
※ 자기 서버가 있어야 가능한 기능 입니다. (트래픽주의) 홈페이지를 만들다 보면 사용자에게 주기가 애매한 소스들이 있습니다. 웹이라는 한계성 때문에 어떻게는 사용자가 내용을 알수가 있지만 최대한 주기 싫은 소스에 대해서 내 서버에서 운영을 할 수 있도록 만들어야 하는데 CrossDomain 위반으로 URL Domain이 다를경우에 문제가 생길때가 있습니다. AddType application/font-woff2 .woff2 일단 폰터어썸이 woff2 확장자를 처리를 해야 합니다. 위에 처럼 MIME 을 추가를 해서 처리가 가능하도록 해줘야지만 WEB 서버가 작동을 하게 됩니다. <FilesMatch "\.(ttf|otf|eot|woff|woff2)$"> Header set Access-Control-Allow-Origin "*" </FilesMatch> 위에 처럼 처리를 해줘서 어디서든 불러가서 사용할수 있도록 해주면 일단은 마무리 입니다. 일단 이렇게 사용을 하면은 자기 서버에서 서비스를 할 수 있는것으로 판단은 되지만 잘 작동하지 않을 수도 있지만 저의 입장에서는 현재 그대로 사용을 할 수 있습니다. 이 뿐만 아니라... Javascript를 고객 사이트에 두지 않아도 작동하도록 하는 기능도 작동을 합니다. 원래 이렇게 사용을 하면…
Read More

Ubuntu 20 LTS에 OPEN VPN 설치

Linux
요즘은 서버에 접속하기 위해서 공개된 Port외에는 IP 접근 차단을 당하는경우가 많은 생겨서 이동중에 접속을 하기 위해서 개인서버에 VPN 서버를 구성하였습니다. 공개된 서비스만큼 안정성은 아직 테스트를 해 보아야 하지만 지금은 개인서버이기때문에 이럴다 할 정도로 개인정보가 세어나갈 일이 없기때문에 설치하기로 큰 맘을 먹고 설치를 진행을 하였습니다. 인터넷에 검색을 하니 인터넷에 쉽게 설치를 할 수 있도록 나와 있어서 쉽게 설치를 하였습니다. curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh chmod +x openvpn-install.sh 이후에 서비스를 올리고 나서 포트를 연결하고 나니 순조롭게 사용을 가능하였습니다. sudo systemctl status openvpn #sudo iptables -t nat -I POSTROUTING 1 -s 10.8.0.0/24 -o eth0 -j MASQUERADE #sudo iptables -I INPUT 1 -i tun0 -j ACCEPT #sudo iptables -I FORWARD 1 -i eth0 -o tun0 -j ACCEPT #sudo iptables -I FORWARD 1 -i tun0 -o eth0 -j ACCEPT 이후에 몇개를 나뉘어서 추가를 하려고 하니 위세 설치…
Read More

Apache를 통한 Synology Proxy 설정

Linux
<VirtualHost *:80> ServerAdmin your-email ServerName your-privkey-domain RewriteEngine On RewriteCond %{HTTPS} off RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] ErrorLog ${APACHE_LOG_DIR}/your-privkey-domain.error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/your-privkey-domain.access.log combined #ProxyPass / http://your-privkey-domain:port #ProxyPassReverse / https://your-privkey-domain:port </VirtualHost> <VirtualHost *:443> ServerAdmin your-email ServerName your-privkey-domain ProxyRequests Off SSLProxyEngine on ProxyPreserveHost On AllowEncodedSlashes NoDecode SSLEngine on SSLProxyVerify none SSLProxyCheckPeerCN off SSLProxyCheckPeerName off SSLProxyCheckPeerExpire off SSLCertificateFile "/etc/letsencrypt/live/your-privkey-domain/cert.pem" SSLCertificateKeyFile "/etc/letsencrypt/live/your-privkey-domain/privkey.pem" SSLCertificateChainFile "/etc/letsencrypt/live/your-privkey-domain/chain.pem" ProxyPass / https://your-privkey-domain:port nocanon ProxyPassReverse / https://your-privkey-domain:port RequestHeader set X-Forwarded-Proto "https" RequestHeader set X-Forwarded-Port "443" ErrorLog ${APACHE_LOG_DIR}/your-privkey-domain.error.log LogLevel warn CustomLog ${APACHE_LOG_DIR}/your-privkey-domain.access.log combined </VirtualHost>
Read More

code server 세팅 기록

Linux, Tool
외근이 많다보니 IDE 세팅을 일일이 맞추기도 힘들어서 알아보던 도중에 code-server가 존재하는것을 알게 되었습니다. PC에 설치 하지 않고 Server에 설치해서 Webbrowser를 이용해서 IDE를 사용하도록 해주는 Tools 이여서 상당히 끌리게 되어서 제 서버에 설치를 하게 되었습니다. 전 웹서버를 이용할대 Apache를 잘 이용하지만 이번에는 code-server 때문에 nginx 를 이용해서 설치를 하게 되었습니다. code-server만을 이용할때는 상당히 잘 작동을 하고 빠르게 작동을 하여서 만족을 하게 되었습니다. 애초에 nginx가 apache보다 가볍기 때문에 속도가 잘 보장이 되어서 좋은 기능을 사용할 수 있게 되었지만 서버를 code-server 만으로 사용하기에는 자원을 너무 낭비를 하기에 여러가지 올리는 도중에 webdav까지 사용할 수 있도록 설정을 하려고 하다보니 여러가지 설정을 찾아서 헤매게 되었습니다. nginx 설정을 인터넷에 많기 때문에 자료를 정리하려다가 포기하고, apache로 갈아 타게 되었습니다. apache도 code-server 기능을 이용하기 위해서는 인터넷에 찾아보니 여러가지로 돌아 다니지만 참 난관의 연속이였습니다.꼬박 하루를 설정을 가지고 WEB 서버 가동을…
Read More

fail2ban 개인 설정

Linux
개인서버를 운영하다보면은 무단으로 접속하는 사람이 많은 편입니다. 처음에는 SSH 접속만을 차단을 하다가 이제는 웹으로도 접속이 많이 시도를 하게 되어서 fail2ban에 설정을 인용해서 apache도 설정을 추가 해서 사용을 합니다. 공개 서버이지만 무단 접속은 막지 않으면은 결국은 쌓여서 서버의 자원을 소모하게 됩니다. 그래서 특단의 조치로 설정을 하게 되면서 설정 파일을 블로그에 기록을 합니다. 개인적인 설정이다 보니 조금은 개인적인 생각이 가미되어 있을수 있지만은 참조를 해서 사용을 하면 되지 않을까 합니다. [DEFAULT] ## 차단하지 않을 IP #ignoreip = 127.0.0.1/8 192.168.10.0/24 # 접속을 차단할 시간. 600 = 10분 bantime = 10800 # 최대 허용 횟수 maxretry = 3 #아래 시간동안 maxretry횟수만큼 실패시 차단 findtime = 60 # (선택) 메일 알림기능 #destemail = sysadmin@example.com #sender = fail2ban@my-server.com #mta = sendmail #action = %(action_mwl)s [sshd] enabled = true #여러 포트를 사용할 경우 port = ssh,10022 port =…
Read More

gitlab CE 버전 의 설치 및 Apache2 동시 운영 실패

Linux
sudo apt updatesudo apt dist-upgrade sudo apt-get install curl openssh-server ca-certificates postfixcurl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bashsudo apt updatesudo apt install gitlab-cesudo EXTERNAL_URL="http://git.truds.kr" apt-get install gitlab-ce vi /etc/gitlab/gitlab.rb sudo gitlab-ctl reconfigure dpkg-reconfigure tzdata a2enmod rewritea2enmod headersa2enmod ssla2dismod -f autoindexa2enmod proxya2enmod proxy_http 10 5 * * 1 /usr/bin/letsencrypt renew >> /var/log/le-renew.log15 5 * * 1 /usr/bin/gitlab-ctl restart nginx sudo vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml gitlab-ctl restartgitlab-ctl stop ServerName gitlab.truds.krServerSignature OffProxyPreserveHost On <Location /> Order deny,allow Allow from all ProxyPassReverse http://127.0.0.1:8080 ProxyPassReverse http://gitlab.truds.kr/ </Location> RewriteEngine on RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f RewriteRule .* http://127.0.0.1:8080%{REQUEST_URI} [P,QSA] # needed for downloading attachments DocumentRoot /opt/gitlab/embedded/service/gitlab-rails/public 그냥 정보를 알려주기보다는 그냥 기록을 남겨보는 정도 입니다. 명령어를 모아 놓아서 보기도 불편합니다. 하지만 실패도 기록이 되기에 남겨서 추후에 제가 잘못한 부분등이 있다면은 수정을 해서 다시 시도해 보기 위해서 기록을 남깁니다.
Read More

ShellScript로 원격DB 백업 및 로컬DB 복원 하기

Linux
#!/bin/bash LOCALDB={로컬DB명} REMOTEDB={원격DB명} LOCALDBFILE=/home/databaseBackup/sqlFile/$LOCALDB.sql echo "Backup:: $REMOTEDB > $LOCALDB" /usr/bin/mysqldump -h{원격DB서버주소} -P {원격DB서버포트} -u {원격DB사용자} -p"{원격DB사용자비밀번호}" --add-drop-table $REMOTEDB > $LOCALDBFILE LOCALDBFILESIZE=$(wc -c "$LOCALDBFILE" | awk '{print $1}') echo "FileSize: $LOCALDBFILESIZE" #파일이 일정 용량 있상일경우에만 복원을 시도 if [ $LOCALDBFILESIZE -gt 3000 ];then # 원격서버의 Root권한이 %인것을 로컬에서는 localhost로 문자 치환 echo "Strng replace:: $LOCALDBFILE >> $LOCALDBFILE.bk" /usr/bin/cat $LOCALDBFILE | sed 's/DEFINER=`root`@`%`/DEFINER=`root`@`localhost`/g' > $LOCALDBFILE.bk # 문자치환된 파일을 덮어써서 1개로 만듬 echo "File Move:: $LOCALDBFILE.bk >> $LOCALDBFILE" /usr/bin/mv -f $LOCALDBFILE.bk $LOCALDBFILE # 문자치환된 파일 삭제처리 echo "Tmpfile Remove $LOCALDBFILE.bk" /usr/bin/rm -rf $LOCALDBFILE.bk # 로컬 DB에 파일 복구 echo "Restore:: $LOCALDB < $LOCALDBFILE" /usr/bin/mysql -u{로컬DB사용자} -p"{로컬DB사용자비밀번호}" $LOCALDB < $LOCALDBFILE fi
Read More

PEM 파일을 PPK 파일로 변환후 안될때

Linux
pem 파일을 가지고 ppk 로 변환을 하였는데, 정상적인디 안될때 ppk file의 버전을 3 에서 2로 변경을 하니 정상적으로 ppk 파일을 이용할 수 있었습니다. 정확한 이유는 버전 차이라고 생각이 됩니다. 가끔 PPK파일이 필요하기때문에 미리 미리 만들어서 테스트를 해두면은 나중에 급할때 사용하기에 편리할수 있다는 생각을 합니다. 물론 Key파일에 대해서는 관리를 잘해서 보관을 해야지 유출되면은 바로 접속 권한을 모두 주기 때문에 적절히 잘 관리하여서 처리를 해야 합니다.
Read More

SVN으로 배포후 기본 세팅하기

Linux
여러 NAS 서버에 배포를 해줄때 초기에 실행할 파일입니다. 예전에는 APM세팅을 해주고 잘아는 사람이 세팅을 해주는것이 일반적인 Server라면은 NAS에서는 기본적인 패키지 설치도 쉽고 해서 회사 내부에서 전혀 모르는 사람이 메뉴얼에 따라서 초기 세팅을 해서 배포하는 경우도 있습니다. 그렇게 작업을 하다 보니 꼭 한번은 체크를 해야 되어서 필수적으로 세팅하고 해야되는 작업을 그냥 파일로 만들어 보았습니다. 어차피 모든 소스는 범용적으로 소스저장소에 올려 놓기때문에 초기에 파일 몇개만 순서적으로 실행을 하면은 모든 사람이 할 수 있어서 이런 방법을 취하게 되었습니다. #!/bin/bash # SVN SETTING /usr/bin/svn propset svn:ignore application/libs/databases.php . # DEFAULT DIRTORY MAKE targetDataBase=`pwd -P` if [ -d $targetDataBase/uploads ]; then echo 'Not Make' else /bin/mkdir $targetDataBase/uploads fi if [ -d $targetDataBase/uploads/logs ]; then echo 'Not Make' else /bin/mkdir $targetDataBase/uploads/logs fi /bin/chmod 777 $targetDataBase/uploads /bin/chmod 777 $targetDataBase/uploads/logs 이렇게 파일을 만들어 놓고 보면은 이제 누구나 할…
Read More