os/Window
dotnet windows
C/H
2024. 4. 13. 19:47
scoop Package Manager
install
Administrator Mode
# 사용자 실행 권한 설정
C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# TLS 설정
C:\> [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
# scoop 설치
C:\> iex "& {$(irm get.scoop.sh)} -RunAsAdmin"
developer env
Administrator Mode
C:\> scoop install 7zip git -g
C:\> scoop bucket add extras
C:\> scoop bucket add nonportable
C:\> scoop bucket add java
C:\> scoop bucket add versions
C:\> scoop update
C:\> scoop install aria2 curl sudo vcredist2022 git-with-openssh tortoisesvn vim touch grep nssm -g
C:\> scoop install sfsu -g
C:\> Invoke-Expression (&sfsu hook)
# windows 공식 패키지 관리자 winget 설치 (with vcredist2022 자동 설치)
# window 11은 설치 되어 있다.
C:\> scoop install winget -g
# grpc 서버용 protobuf설치
C:\> scoop install protobuf -g
PowerShell v7
- window10 에서 winget 이 없으면 위 scoop에서 winget 설치 후 설치한다.
winget install -e --id Microsoft.PowerShell
Windows Terminal
winget install -e --id=Microsoft.WindowsTerminal
Visual Studio Code
winget install -e Microsoft.VisualStudioCode
Gitlab-Runner
# PS C:\> sudo scoop install gitlab-runner -g
PS C:\> winget install -e --id Gitlab.Runner
Open SSH
- https://github.com/PowerShell/Win32-OpenSSH/releases
- How to install and Configure Oenssh (Windows Serer 2016) : https://www.hostwinds.com/tutorials/how-to-install-and-configure-openssh-windows-server-2016
- Configuring OpenSSH-Server (sshd) on Windows 11: https://erwin.co/configuring-openssh-server-sshd-on-windows-11/
- https://youtu.be/Tpf3dQQ8l3U?si=FtCgLN1H_1WLNWnD 사용자/그룹 추가 및 적용
- https://youtu.be/Eklxg_UUktI?si=zSzJhjAyuEQ2kS7m SFTP 구성 및 사용자/그룹 및 디렉토리 적용
Install
PS C:\> sudo scoop install openssh -g
# PS C:\> winget install -e --id Microsoft.OpenSSH.Beta
Service Start / Stop
# Setup
PS C:\> sudo C:\ProgramData\scoop\apps\openssh\current\install-sshd.ps1
# OPTIONAL but recommended: 윈도우 재부팅시 자동 시작
PS C:\> Set-Service -Name sshd -StartupType 'Automatic'
PS C:\> Set-Service -Name ssh-agent -StartupType 'Automatic'
# sshd 서비스 중지/시작
PS C:\> sc stop sshd
PS C:\> sc start sshd
# ssh-agent 서비스 중지/시작
PS C:\> sc stop ssh-agent
PS C:\> sc start ssh-agent
ssh shell 등록
# ssh shell 을 pwsh 등록
PS C:\> New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Program Files\PowerShell\7\pwsh.exe" -PropertyType String -Force
# ssh shell 을 powershell 등록
# New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
# ssh shell 을 git-bash 등록
# New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\ProgramData\scoop\apps\git-with-openssh\current\bin\bash.exe" -PropertyType String -Force
Config OpenSSH
PS C:\> cp C:\ProgramData\ssh\sshd_config.txt C:\ProgramData\ssh\sshd_config
PS C:\> notepad C:\ProgramData\ssh\sshd_config
# 기본 포트 22
# Port 22
SyslogFacility LOCAL0
# 전체 사용자 sftp 만 사용
# ForceCommand internal-sftp
# 기능 주석 처리
# Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
# 로그인 사용자 디렉토리 및 sftp 설정
# 없을 경우 정의된 홈 폴더, 사용자 기본 홈(C:\Users\manager) 폴더로 설정되고, ssh, sftp 모두 사용 가능하다.
# Match User manager
# # ForceCommand internal-sftp # sftp 만 사용할 경우 주석 해제
# ChrootDirectory "C:\Projects"# 기본 포트 22
SyslogFacility LOCAL0
# 전체 사용자 sftp 만 사용
# ForceCommand internal-sftp
# 기능 주석 처리
# Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
# 로그인 사용자 디렉토리 및 sftp 설정
# 없을 경우 정의된 홈 폴더, 사용자 기본 홈(C:\Users\manager) 폴더로 설정되고, ssh, sftp 모두 사용 가능하다.
# Match User manager
# # ForceCommand internal-sftp # sftp 만 사용할 경우 주석 해제
# ChrootDirectory "C:\Projects"
Open Firewall(방화벽 오픈)
# 방화벽 추가
# Confirm the Firewall rule is configured. It should be created automatically by setup. Run the following to verify
# sshd_config port 와 동일한 포트를 등록해야 한다.
$port = 22
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {
Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..."
New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort $port
} else {
Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists."
}
Add User
- 설정 > 계정 > 다른 사용자 > 이 PC에 다른 사용자 추가 선택(클릭)
- 관리자 권한이 있는 사용자만 rdp 연결이 된다. 생성한 사용자에게 관리자 권한을 부여한다.
TEST Connection
# 원격 연결 open
PS C:\> mstsc
- `다른 이름으로 저장(v)` 으로 rdp 파일을 생성한다.
- 저장한 rdp 파일 하단에
enablecredsspsupport:i:0
추가하고 저장한다. - 저장한 rdp 파일을 사용자에게 전달한다.
ssh 연결
# username 계정의 cmd, pwsh 실행
PS C:\> runas.exe /user:username cmd
PS C:\> runas.exe /user:username pwsh
# 해당 계정으로 ssh 연결 테스트, 연결이 안될 경우 아래 filezilla 로 연결 테스트 진행
# sftp username@localhost
PS C:\> sftp username@localhost -p 22
sftp 클라이언트 filezilla 설치
PS C:\> scoop install filezilla -g
Dotnet 설치
- .NET Download Page: https://dotnet.microsoft.com/ko-kr/download/dotnet
Install
PS C:\> winget install Microsoft.Dotnet.SDK.8
check version
PS C:\> dotnet --version
Node.js
Install
PS C:\> winget install OpenJs.NodeJs.LTS
# windows pnpm 설치
# gitlab-runner 에서 사용하기 위해서 윈도우용 pnpm 을 설치한다.
# https://pnpm.io/ko/installation
PS C:\> winget install -e pnpm.pnpm
Check version
# 버전 확인, 확인이 되지 않으면 새로운 pwsh 창에서 실행
PS C:\> node -v
PS C:\> npm -v
PS C:\> pnpm -v
typescript
# typescript
PS C:\> sudo npm install typescript -g
pm2
# pm2
PS C:\> sudo npm install pm2 -g
# pm2-logrotate : https://www.npmjs.com/package/pm2-logrotate
PS C:\> pm2 install pm2-logrotate
PS C:\> pm2 set pm2-logrotate:max_size 10M
PS C:\> pm2 set pm2-logrotate:compress true
# check version
PS C:\> sudo pm2 -v
# pm2 실행 프로세스 확인
PS C:\> sudo pm2 list
┌────┬───────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
└────┴───────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
# pm2로 관리되는 프로세스(데몬)을 저장한다.
PS C:\> sudo pm2 save
# window 에서 `pm2 startup` 대안 설치
# Valid cpu: x64,ia32
# arm64 미 지원
PS C:\> sudo npm install pm2-windows-startup -g
# pm2 startup 으로 os 시작 프로그램에 등록한다.
PS C:\> sudo pm2-startup install
Redis
install
PS C:\> sudo scoop install redis another-redis-desktop-manager -g
configuration: C:\ProgramData\scoop\apps\redis\current\redis.conf
# Maxmemory : 메모리 사용량 제한
# 메모리 정책이 설정되어 있지 않은 경우, 에러가 발생한다.
# 메모리 정책이 설정되어 있는 경우, 값이 추가될 때마다 메모리 정책에 따라 데이터가 삭제된다.
maxmemory 1gb
# Maxmemory-policy : 메모리 정책
# - LRU(Least Recently Used): 가장 최근에 사용되지 않은 것
# - LFU(Least-Frequently-Used): 가장 적게 사용된 것
# noeviction: 캐시를 지우지 않는 정책이다. 메모리가 maxmemory 이상을 사용하게 되면 error를 발생시킨다.
# lkeys-lru: LRU 알고리즘 기반으로 키를 삭제한다.
# allkey-random: 랜덤하게 키를 삭제한다.
# allkeys-lfu: LFU 알고리즘 기반으로 키를 삭제한다.
# volatile-lru: LRU 알고리즘 기반으로 EXPIRE SET에 있는 키를 삭제한다.
# volatile-random: 랜덤하게 EXPIRE SET에 있는 키를 삭제한다.
# volatile-ttl: TTL이 짧은 순으로 EXPIRE SET에 있는 키를 삭제한다.
# volatile-lfu: LFU 알고리즘 기반으로 EXPIRE SET에 있는 키를 삭제한다.
maxmemory-policy allkeys-lru
# 외부에서 접근 가능
bind 0.0.0.0 -::1
port 6379
# 비밀번호 설정
# 32자 정도가 적당할 것입니다.
# 구성 파일에 언급된 대로 외부 사용자가 초당 150,000개 이상의 비밀번호를 쉽게 추측할 수 있습니다.
requirepass redispassword
# 서버 프로세스의 Sub Thread3에 의해 백그라운드에서 수행되기 떄문에 블록킹 현상을 피할수 있습니다.
lazyfree-lazy-eviction yes
lazyfree-lazy-expire yes
lazyfree-lazy-server-del yes
replica-lazy-flush yes
Service Start / Stop
# 서비스 등록
PS C:\> sudo nssm install Redis "C:\ProgramData\scoop\apps\redis\current\start.bat" -service-run
# 서비스 실행
PS C:\> sudo nssm start Redis
# Services.msc 에서 `Redis` 서비스를 확인 할 수 있다.
# 실행 확인
# 아래 명령어로 `127.0.0.1:6379>` 표시가 된다면 정상적으로 시작 완료.
PS C:\> redis-cli
# 127.0.0.1:6379>
# 연결실패 시
PS C:\> redis-cli
# not connected>
# 비밀번호가 설정된 redis 확인 방법
PS C:\> redis-cli
127.0.0.1:6379> info
# NOAUTH Authentication required.
# 127.0.0.1:6379> auth {password}
127.0.0.1:6379> auth redispassword
OK
127.0.0.1:6379> info
# 서비스 정보가 표시된다.
# Server
# ...
# ...
Mysql
Install
PS C:\> sudo scoop install mysql -g
# winget mysql
# PS C:\> sudo winget install Oracle.MySQL
Service Start / Stop
# setup service
PS C:\> sudo mysqld --install MySQL --defaults-file="C:\ProgramData\scoop\apps\mysql\current\my.ini"
# start
PS C:\> sudo sc start MySQL
# stop
PS C:\> sudo sc stop MySQL
Change Password
# 설치 후 로그인, 설정된 비밀번호가 없다.
PS C:\> mysql -u root -p
Enter password:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'mgr098&^%';
Query OK, 0 rows affected (0.01 sec)
# mysql cli 나가기
mysql> exit
Bye
Change Charset: C:\ProgramData\scoop\apps\mysql\current\my.ini
[mysqld]
datadir=C:/ProgramData/scoop/persist/mysql/data
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
[client]
user=root
[mysqldump]
character-set-server = utf8mb4
[mysql]
character-set-server = utf8mb4
install client tool
PS C:\> sudo scoop install heidisql -g
Nginx
Install
PS C:\> sudo scoop install nginx -g
Service Start / Stop
PS C:\> sudo nssm install nginx "C:\ProgramData\scoop\apps\nginx\current\nginx.exe"
# start
PS C:\> sudo snssm start nginx
# stop
PS C:\> sudo snssm stop nginx
# restart
PS C:\> sudo snssm restart nginx
# check service
PS C:\> sudo tasklist /fi "IMAGENAME eq nginx.exe"
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
nginx.exe 8576 Services 0 8,528 K
nginx.exe 10436 Services 0 8,888 K
Config site
- Serving Static Content: https://docs.nginx.com/nginx/admin-guide/web-server/serving-static-content/
- NGINX Reverse Proxy : https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/
server { listen 80; listen [::]80; server_name stg.b-game114.com; access_log logs/com.g-game114.stg.access.log; error_log logs/com.g-game114.stg.error.log; root c:/Server/holdem-client/web-mobile; index index.html; location / { try_files $uri $uri/ =404; } }
Nginx with PHP-FastCGI on Windows
- https://www.nginx.com/resources/wiki/start/topics/examples/phpfastcgionwindows/start-php-fastcgi.bat
@ECHO OFF ECHO Starting PHP FastCGI... set PATH=C:\PHP;%PATH% c:\bin\RunHiddenConsole.exe C:\PHP\php-cgi.exe -b 127.0.0.1:9123
root c:/www;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9123;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
반응형