회사 동일 다수 DB 관리

CSharp, Windows, 프로그램
DB 가 분리되어 있지만 모두 동일한 DB 일 경우에 컬럼을 동일하게 변경하기 위해서 필요함.먼저 대상이 되는 DB를 수집후 테이블 명을 보고 컬럼을 변경을 할수 있습니다. 각 DB에서 테이블 정보를 수집도 가능합니다. 테이블을 추가 할 경우 다수의 DB에서 동일한 작업이 필요할 경우에 추가를 진행하면은 동시에 다수를 작업을 합니다. 테이블을 한곳에 만들어 두거나 혹은 특정 DB에서 필요한 테이블을 복사 혹은 삭제 처리 할수 있습니다. 테이블 내의 컬럼을 추가 하거나 삭제 변경 할수 있습니다. 컬럼의 형식이나 값을 변경할 경우에 나오는 화면입니다. 테이블에 컬럼을 추가 할 경우에 입력 하는 화면 입니다. 데이터를 볼때 정렬이 필요하면은 정렬 기능을 이용해서 정렬을 해서 전체 테이블에 동일 컬럼이나 값이 일치 하지 않는 것을 확인할때 필요합니다. DB 명세서를 만들때 엑셀 파일로 출력이 가능 합니다. 실제 엑셀로 출력 할 때 테스트나 불필요한 테이블을 제외 하고 저장 할 수 있도록 설정을…
Read More

Windows WSL2 자동 시작 설정

Windows
파워쉘 프로그램 코드 If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { $arguments = "& '" + $myinvocation.mycommand.definition + "'" Start-Process powershell -Verb runAs -ArgumentList $arguments Break } $remoteport = bash.exe -c "ifconfig eth0 | grep 'inet '" $found = $remoteport -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'; if ( $found ) { $remoteport = $matches[0]; } else { Write-Output "The Script Exited, the ip address of WSL 2 cannot be found"; exit; } $ports = @(22, 80, 443, 3306); Invoke-Expression "netsh interface portproxy reset"; for ( $i = 0; $i -lt $ports.length; $i++ ) { $port = $ports[$i]; Invoke-Expression "netsh interface portproxy add v4tov4 listenport=$port connectport=$port connectaddress=$remoteport"; } Invoke-Expression "netsh interface portproxy show v4tov4"; 파워쉘 파일을 작업 스케줄러에 등록을 합니다. 저는 c:\wsl_config 폴더 아래에 "wsl_port_forwarding.ps1" 로 만들어서 사용을 합니다. 동작 속성을 다음과 같이 설정을 하시면 됩니다. 프로그램 스크립트…
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

Windows10 OneDrive 삭제

Windows
OneDrive를 삭제 하게 될경우에는 기본에 동기화 된게 있으면은 동기화를 해제하고 작업을 해야 합니다. 동기화가 이뤄지는 도중에 작업하면은 동기화 항목중에 바탕화면이나 다른것이 있다면은 함께 지워지게 됩으로 꼭 동기화를 해제하고 삭제 처리 해주시기 바랍니다. @echo off cls set x86="%SYSTEMROOT%\System32\OneDriveSetup.exe" set x64="%SYSTEMROOT%\SysWOW64\OneDriveSetup.exe" echo Closing the OneDrive process. echo. taskkill /f /im OneDrive.exe > NUL 2>&1 ping 127.0.0.1 -n 5 > NUL 2>&1 echo Uninstalling OneDrive... echo. if exist %x64% ( %x64% /uninstall ) else ( %x86% /uninstall ) ping 127.0.0.1 -n 5 > NUL 2>&1 echo Removing OneDrive leftovers... echo. rd "%USERPROFILE%\OneDrive" /Q /S > NUL 2>&1 rd "C:\OneDriveTemp" /Q /S > NUL 2>&1 rd "%LOCALAPPDATA%\Microsoft\OneDrive" /Q /S > NUL 2>&1 rd "%PROGRAMDATA%\Microsoft OneDrive" /Q /S > NUL 2>&1 echo Removing OneDrive from the Windows Explorer Side Panel... echo. REG DELETE "HKEY_CLASSES_ROOT\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}" /f…
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

CRON 을 ShellScript로 처리하기

Linux, NAS
서버를 운영하다보면 여러가지 스케쥴러 작업을 실행할 일이 생깁니다. 내가 서버 관리자 이면은 그냥 귀찮음을 감수 하고 매번 등록을 하는것도 나쁘지 않지만 매번 찾아가서 맞추기는 솔직히 귀찮음이 발동을 해서 CRONTAB은 한개의 파일만 보고 실행을 할려고 만들었습니다. #!/bin/bash # 시스템 분 정보 NOW=$(date +"%M") echo $NOW # CRON 단일 파일로 처리 하기 위해서 분 단위 구분 let FULL=$NOW%60 let HALF=$NOW%30 let TEN=$NOW%10 # CRON 조건문 추가 if [ $FULL -eq 0 ]; then echo 'FULL' /volume1/@appstore/PHP7.4/usr/local/bin/php74 -q /volume2/publicedition/skem/index.php system cron dumy_noti elif [ $HALF -eq 0 ]; then echo 'HALF' elif [ $TEN -eq 0 ]; then echo 'TEN' else echo 'ONE' /volume1/@appstore/PHP7.4/usr/local/bin/php74 -q /volume2/publicedition/skem/index.php system lot lot_check fi 물론 단일 파일이라서 CRONTAB하고는 작동 방법이 조금 다르지만 언제나 내 좋을대로만 움직일수 없기에 가장 협의를 본 방법입니다. 이 방법외에도 많지만 관리자에게 말을 하지…
Read More