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


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 설치


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

Nginx with PHP-FastCGI on Windows

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;
}
반응형